#pragma once

#include "Math/Math.h"
#include <vector>
#include <string>
#include <array>

#define MAX_POINT_LIGHT_COUNT 2000
#define MAX_POINT_LIGHT_PER_TILE 1023
#define TILE_SIZE 16

struct MaterialUbo
{
	int32 hasAlbedoMap;
	int32 hasNormalMap;
};

struct CameraUbo
{
	glm::mat4 proj;
	glm::mat4 view;
	glm::vec3 cameraPos;
};

struct ObjectUbo
{
	glm::mat4 model;
};

struct EntityVertex
{
	glm::vec3 position;
	glm::vec3 normal;
	glm::vec2 uv;
};

struct PointLight
{
public:
	glm::vec3 pos;
	float radius = { 5.0f };
	glm::vec3 intensity = { 1.0f, 1.0f, 1.0f };
	float padding;

	PointLight() {}
	PointLight(glm::vec3 pos, float radius, glm::vec3 intensity)
		: pos(pos), radius(radius), intensity(intensity)
	{};
};

struct LightVisiblity
{
	uint32 count;
	std::array<uint32, MAX_POINT_LIGHT_PER_TILE> lightIndices;
};
